import request from './request'
import { setLoggingInStatus, setSuppressAuthErrors } from './request'

/**
 * 用户登录
 * @param {Object} data - 登录信息
 * @param {string} data.username - 用户名
 * @param {string} data.password - 密码
 * @returns {Promise} 返回登录结果，包含token和用户基本信息
 */
export function login(data) {
  // 设置登录状态标记为true
  setLoggingInStatus(true)
  
  return request({
    url: '/user/login',
    method: 'post',
    data
  }).catch(error => {
    console.error('登录请求失败:', error)
    throw error
  }).finally(() => {
    // 无论成功还是失败，都重置登录状态标记
    setLoggingInStatus(false)
  })
}

/**
 * 用户注册
 * @param {Object} data - 注册信息
 * @param {string} data.username - 用户名
 * @param {string} data.password - 密码
 * @returns {Promise} 返回注册结果
 */
export function register(data) {
  return request({
    url: '/user/register',
    method: 'post',
    data
  })
}

/**
 * 获取用户信息
 * @param {Object} options - 选项
 * @param {boolean} options.silent - 是否使用静默模式，不显示错误提示
 * @returns {Promise} 返回用户详细信息
 */
export function getUserInfo(options = { silent: false }) {
  // 如果是静默模式，全局抑制401错误
  if (options.silent) {
    setSuppressAuthErrors(true)
  }
  
  return request({
    url: '/user/info',
    method: 'get',
    suppressError: options.silent // 抑制错误提示
  }).finally(() => {
    // 重置401错误抑制
    if (options.silent) {
      setSuppressAuthErrors(false)
    }
  })
}

/**
 * 更新用户信息
 * @param {Object} data - 用户信息
 * @returns {Promise} 返回更新结果
 */
export function updateUserInfo(data) {
  return request({
    url: '/common/upload',
    method: 'post',
    data
  })
}

/**
 * 更新用户密码
 * @param {Object} data - 密码信息
 * @param {string} data.oldPassword - 旧密码
 * @param {string} data.newPassword - 新密码
 * @returns {Promise} 返回更新结果
 */
export function updatePassword(data) {
  return request({
    url: '/user/update/password',
    method: 'post',
    data
  })
}

/**
 * 获取回复我的评论
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 当前页码
 * @param {number} params.pageSize - 每页条数
 * @param {boolean} params.silent - 是否使用静默模式，不显示错误提示
 * @returns {Promise} 返回评论回复列表
 */
export function getCommentReplies(params = {}) {
  // 确保分页参数正确，后端使用pageNum而不是page
  const requestParams = { ...params }
  if (params.page !== undefined && params.pageNum === undefined) {
    requestParams.pageNum = params.page
    delete requestParams.page
  }
  
  return request({
    url: '/user/commentReply',
    method: 'get',
    params: requestParams,
    suppressError: params.silent
  })
}

/**
 * 获取我的评论
 * @param {Object} params - 查询参数
 * @param {number} params.pageNum - 当前页码
 * @param {number} params.pageSize - 每页条数
 * @param {boolean} params.silent - 是否使用静默模式，不显示错误提示
 * @returns {Promise} 返回我的评论列表
 */
export function getMyComments(params = {}) {
  // 确保分页参数正确，后端使用pageNum而不是page
  const requestParams = { ...params }
  if (params.page !== undefined && params.pageNum === undefined) {
    requestParams.pageNum = params.page
    delete requestParams.page
  }

  return request({
    url: '/user/myComment',
    method: 'get',
    params: requestParams,
    suppressError: params.silent
  })
}

/**
 * 退出登录
 * @returns {Promise} 返回退出结果
 */
export function logout() {
  return request({
    url: '/user/logout',
    method: 'post'
  })
} 